binding in fragment


Posted by Limon on 2023-12-12

在fragment使用binding時不能直接使用binding.lifecycleOwner = this,為什麼呢?

因為Fragment 的生命週期和視圖的生命週期是不同的。

在 Android 中,當使用 Data Binding 在 Fragment 中綁定視圖時,為了確保生命週期感知(lifecycle-aware)的觀察者正確地接收到數據更改通知,應該將 binding.lifecycleOwner 設置為 viewLifecycleOwner。

在 Fragment 中,可能會發生 Fragment 的生命週期比其包含的視圖的生命週期更長的情況。當 Fragment 被加載或重新建立時,其 this 可能指向 Fragment 的實例,而這個實例的生命週期不同於 Fragment 的視圖。

使用 viewLifecycleOwner 來設置 binding.lifecycleOwner 會確保 Data Binding 知道應該使用視圖的生命週期來觀察數據變化,這樣可以防止在 Fragment 生命週期結束時仍在觀察數據,從而避免潛在的內存泄漏問題。

所以正確的用法是:

binding.lifecycleOwner = viewLifecycleOwner

這樣確保 Data Binding 能夠正確地適應 Fragment 的生命週期,並且在 Fragment 被銷毀時停止觀察數據。


#mvvm #Android #Kotlin #lifecycleOwner #viewLifecycleOwner







Related Posts

Day 54 & 55 - Function Decorators

Day 54 & 55 - Function Decorators

[ Vue筆記 ] 計算屬性 computed 的使用

[ Vue筆記 ] 計算屬性 computed 的使用

Sequlize & Express. P3

Sequlize & Express. P3


Comments